package com.duoduo.位运算;

/**
 * @program: algorithm
 * @description: 汉明距离461
 * 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
 *
 * 给你两个整数 x 和 y，计算并返回它们之间的汉明距离。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：x = 1, y = 4
 * 输出：2
 * 解释：
 * 1   (0 0 0 1)
 * 4   (0 1 0 0)
 *        ↑   ↑
 * 上面的箭头指出了对应二进制位不同的位置。
 * @author: chaidl  ！
 * @create: 2022-04-30 21:28
 */
public class 汉明距离461 {
	public static void main(String[] args) {
		int i = new 汉明距离461().hammingDistance(1, 4);
		System.out.println("结果是："+i);
	}
	public int hammingDistance(int x, int y) {
		// x ^ y 异或只有两个都相等的时候才为1，不然都是0
		int s = x ^ y, ret = 0;
		while (s != 0) {
			//与运算，都是1才为1，否则都为0
			s = s &s - 1;
			ret++;
		}
		return ret;
	}
	public int hammingDistance2(int x, int y) {
		return Integer.bitCount(x ^ y);
	}
}
